package com.neuedu.corejava.ch12Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;

import sun.applet.Main;

public class Filecopyer {

	public void copy(String src, String desc) {
		File f1 = new File(src);
		File f2 = new File(desc);
		copy(f1, f2);
	}

	// 使用方法的重载对参数进行重构
	public void copy(File srcFile, File descFile) {
		//如果源文件不存在，则不需要拷贝
		if(srcFile==null || !srcFile.exists()) {
			System.out.println("源文件不存在");
			return;
		}
		//检查目标文件或目标目录是否存在
		if(descFile==null || !descFile.exists()) {
			System.out.println("目标文件为null");
			return;
		}else {
			descFile.getParentFile().mkdirs();
		}
		// 输入流和输出流
		FileInputStream fileInputStream = null;
		FileOutputStream fileOutputStream = null;

		try {
			fileInputStream = new FileInputStream(srcFile);
			fileOutputStream = new FileOutputStream(descFile,true);
			
			byte[] b = new byte[128];

			// 把读到的数据保存在buffer中，并返回实际读取的内容长度，如果文件已经读取完毕则返回-1
			int length = fileInputStream.read(b);
			while (length != -1) {// 当length==-1时，表示文件读取完毕
				// 循环写入数据，直到文件写完为止；注意：每次只写入读取的数据0,length
				fileOutputStream.write(b, 0, length);
				// 循环读取数据，直到文件读完为止
				length = fileInputStream.read(b);
			}

		} catch (FileNotFoundException e) {
			e.printStackTrace();

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
				if (fileInputStream != null) {
					try {
						fileInputStream.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}

	}

	public static void main(String[] args) {

		String src="c:\\abc.txt";
		String desc="c:\\\\abc_copy.txt";
		Filecopyer copyer=new Filecopyer();
		long start=System.currentTimeMillis();
		System.out.println("拷贝中...");
		copyer.copy(src, desc);
		long stop=System.currentTimeMillis();
		System.out.println("拷贝时间： "+(stop-start)/1000);
	}
}
